/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.rencanaanggaranpendapatanuangujiantugasakhirkuliahkerjanyatawisuda;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.sadhar.sia.common.ClassConnection;
import org.zkoss.zul.Messagebox;

/**
 *
 * @author kris
 */
public class RencanaAnggaranPendapatanUKWImpl implements RencanaAnggaranPendapatanUKWDAO {

    public RencanaAnggaranPendapatanUKWImpl() {
        ClassConnection.getTransactionProxyFactoryBean().setTarget(this);
    }

    /**
     * Digunakan untuk mendapatkan data pos pendapatan dari tabel ppmk.posPendapatan
     * berdasarkan idPosPendapatan 6,7,dan 9
     * @return
     * @throws Exception
     */
    public List<Map> getPosPendapatan() throws Exception {
        String sql = "select * from ppmk.posPendapatan WHERE idPosPendapatan=6 or "
                + " idPosPendapatan=7 or idPosPendapatan=9";
        List<Map> maps = ClassConnection.getJdbc().queryForList(sql);
        return maps;
    }

    /**
     * Digunakan untuk mendapatkan nama unit kerja dari table ppmk.posAnggaranPendapatanUnit,kamus.unkerja,
     * dengan parameter tahunAnggaran dan idPosPendapatan
     * @param tahun tahunAnggaran
     * @param idPosPendapatan dari tabel posAnggaranPendapatanUnit
     * @return
     * @throws Exception
     */
    public List<Map> getUnitKerja(String tahun, int idPosPendapatan) throws Exception {
        String sql = "select un.Nama_unit_kerja,un.idUnitKerja,ap.idPosAnggaranPendapatanUnit,"
                + " ap.tahunAnggaran,ap.idPosPendapatan,ap.kodeUnitKerja "
                + " from ppmk.posAnggaranPendapatanUnit as ap "
                + " inner join kamus.unkerja as un on ap.kodeUnitKerja=un.Kd_unit_kerja "
                + " where idPosPendapatan=? "
                + " AND tahunAnggaran=? ";
        List<Map> maps = ClassConnection.getJdbc().queryForList(sql, new Object[]{idPosPendapatan, tahun});
        return maps;
    }

    public List<Map> getAnggaranPendapatanUjianAkhirKKN(String tahun, int idPosPendapatan) throws Exception {
        String sql = "SELECT * FROM "
                + " ppmk.anggaranPendapatanUjianAkhirKKN,"
                + " ppmk.posAnggaranPendapatanUnit,"
                + " ppmk.posPendapatan,"
                + " kamus.unkerja "
                + " where"
                + " ppmk.posAnggaranPendapatanUnit.idPosAnggaranPendapatanUnit = ppmk.anggaranPendapatanUjianAkhirKKN.idPosAnggaranPendapatanUnit "
                + " and ppmk.anggaranPendapatanUjianAkhirKKN.tahunAnggaran=? AND"
                + " ppmk.posPendapatan.idPosPendapatan = ? "
                + " and ppmk.posAnggaranPendapatanUnit.idPosPendapatan = ppmk.posPendapatan.idPosPendapatan "
                + " and kamus.unkerja.Kd_unit_kerja = ppmk.posAnggaranPendapatanUnit.kodeUnitKerja ";
        List<Map> map = ClassConnection.getJdbc().queryForList(sql, new Object[]{tahun, idPosPendapatan});
        return map;
    }

    public Integer getTotalAnggaran(String tahun, int idPosPendapatan) {
        String sql = "Select SUM(prediksiJmlMhsYgUjian*tarif*(prosentase/100)) from ppmk.anggaranPendapatanUjianAkhirKKN"
                + " where tahunAnggaran=? AND idPosAnggaranPendapatanUnit=?";
        Integer result = ClassConnection.getJdbc().queryForInt(sql, new Object[]{tahun, idPosPendapatan});
        return result;
    }

// revisied by : sarah (BAPSI), tgl 19-12-2009
    /**
     * Digunakan untuk melakukan perubahan data rencana anggaran pada table ppmk.anggaranPendapatanUjianAkhirKKN
     * @param rencanaAnggaranPendapatanUKW
     * @throws Exception
     */
    public void update(RencanaAnggaranPendapatanUKW rencanaAnggaranPendapatanUKW) throws Exception {
        String sql = "UPDATE ppmk.anggaranPendapatanUjianAkhirKKN set periode=?,prediksiJmlMhsYgUjian=?,tarif=?,prosentase=?  "
                + " WHERE idPosAnggaranPendapatanUnit=? and periode=?";
        ClassConnection.getJdbc().update(sql, new Object[]{
                    rencanaAnggaranPendapatanUKW.getPeriode(),
                    rencanaAnggaranPendapatanUKW.getPrediksiJmlYgUjian(),
                    rencanaAnggaranPendapatanUKW.getTarif(),
                    rencanaAnggaranPendapatanUKW.getProsentase(),
                    rencanaAnggaranPendapatanUKW.getIdPosAnggaranPendapatanUnit(),
                    rencanaAnggaranPendapatanUKW.getPeriode()
                });
    }

    /**
     * Digunakan untuk meyimpan data pada table ppmk.anggaranPendapatanUjianAkhirKKN
     * @param rencanaAnggaranPendapatanUKW
     * @throws Exception
     */
    @Override
    public void insert(RencanaAnggaranPendapatanUKW rencanaAnggaranPendapatanUKW) throws Exception {
        String sql = "insert into ppmk.anggaranPendapatanUjianAkhirKKN"
                + " (idPosAnggaranPendapatanUnit,periode,prediksiJmlMhsYgUjian,tarif,prosentase,tahunAnggaran)"
                + " values(?,?,?,?,?,?)  ";

        ClassConnection.getJdbc().update(sql, new Object[]{
                    rencanaAnggaranPendapatanUKW.getIdPosAnggaranPendapatanUnit(),
                    rencanaAnggaranPendapatanUKW.getPeriode(),
                    rencanaAnggaranPendapatanUKW.getPrediksiJmlYgUjian(),
                    rencanaAnggaranPendapatanUKW.getTarif(),
                    rencanaAnggaranPendapatanUKW.getProsentase(),
                    rencanaAnggaranPendapatanUKW.getTahunAnggaran()
                });
    }

// revisied by : sarah (BAPSI), tgl 19-12-2009
    @Override
    public Map getAnggaranPendapatanUjianAkhirKKN(String tahun, int idPosPendapatan, int idPosAnggaranPendapatan, String periode) throws Exception {
        String sql = "SELECT * FROM "
                + " ppmk.anggaranPendapatanUjianAkhirKKN,"
                + " ppmk.posAnggaranPendapatanUnit,"
                + " ppmk.posPendapatan,"
                + " kamus.unkerja "
                + " where"
                + " ppmk.posAnggaranPendapatanUnit.idPosAnggaranPendapatanUnit = ppmk.anggaranPendapatanUjianAkhirKKN.idPosAnggaranPendapatanUnit "
                + " and ppmk.anggaranPendapatanUjianAkhirKKN.tahunAnggaran=? AND"
                + " ppmk.posPendapatan.idPosPendapatan = ? "
                + " AND ppmk.posAnggaranPendapatanUnit.idPosAnggaranPendapatanUnit= ? "
                + " and ppmk.anggaranPendapatanUjianAkhirKKN.periode = ? "
                + " and ppmk.posAnggaranPendapatanUnit.idPosPendapatan = ppmk.posPendapatan.idPosPendapatan "
                + " and kamus.unkerja.Kd_unit_kerja = ppmk.posAnggaranPendapatanUnit.kodeUnitKerja";
        List<Map> result = ClassConnection.getJdbc().queryForList(sql, new Object[]{tahun, idPosPendapatan, idPosAnggaranPendapatan, periode});
        Map map = new HashMap();
        for (Map m : result) {
            map = m;
        }
        return map;
    }

    /**
     * Digunakan untuk menghapus data pada tabel ppmk.anggaranPendapatanUjianAkhirKKN
     * @param idPosAnggaranPendapatanUnit
     * @param tahun
     * @param periode
     * @throws Exception
     */
    @Override
    public void delete(int idPosAnggaranPendapatanUnit, String tahun, String periode) throws Exception {
        // revisied by : sarah (BAPSI), tgl 19-12-2009
        String sql = "delete from  ppmk.anggaranPendapatanUjianAkhirKKN "
                + " where idPosAnggaranPendapatanUnit=? and periode = ? and tahunAnggaran = ?";
        ClassConnection.getJdbc().update(sql, new Object[]{idPosAnggaranPendapatanUnit, periode, tahun});
    }
    // revisied by : sarah (BAPSI), tgl 19-12-2009

    /**
     * Digunakan untuk menghitung total anggaran dengan rumus prediksi jml mahasiswa*tarif*prosentase/100
     * @param tahun
     * @param idPosPendapatan
     * @param kodeUnitKerja
     * @param periode
     * @return
     */
    public Integer getTotalAnggaran2(String tahun, int idPosPendapatan, String kodeUnitKerja, String periode) {
        String sql = "select sum((pp.prediksiJmlMhsYgUjian*pp.tarif*pp.prosentase)/100) as totalAnggaran "
                + "from ppmk.anggaranPendapatanUjianAkhirKKN pp "
                + "left join ppmk.posAnggaranPendapatanUnit pd on pp.idPosAnggaranPendapatanUnit = pd.idPosAnggaranPendapatanUnit and pp.tahunAnggaran = pd.tahunAnggaran "
                + "where pp.tahunAnggaran = ? "
                + "and pd.idPosPendapatan = ? "
                + "and pd.kodeUnitKerja = ? "
                + "and pp.periode <> ?";
        Integer result = ClassConnection.getJdbc().queryForInt(sql, new Object[]{tahun, idPosPendapatan, kodeUnitKerja, periode});
//        try {
//            Messagebox.show("select sum((pp.prediksiJmlMhsYgUjian*pp.tarif*pp.prosentase)/100) as totalAnggaran " + "from ppmk.anggaranPendapatanUjianAkhirKKN pp " + "left join ppmk.posAnggaranPendapatanUnit pd on pp.idPosAnggaranPendapatanUnit = pd.idPosAnggaranPendapatanUnit and pp.tahunAnggaran = pd.tahunAnggaran " + "where pp.tahunAnggaran = '" + tahun + "' " + "and pd.idPosPendapatan = " + idPosPendapatan + " " + "and pd.kodeUnitKerja = '" + kodeUnitKerja + "' " + "and pp.periode <> '" + periode + "'");
//        } catch (InterruptedException ex) {
//            Logger.getLogger(RencanaAnggaranPendapatanUKWImpl.class.getName()).log(Level.SEVERE, null, ex);
//        }
        return result;
    }
}
